package com.yuelao.yuelao_backend.service;

/**
 * 成就服务，用于检查和更新用户成就进度
 */
public interface AchievementService {

    /**
     * 检查签到相关的成就
     * @param userId 用户ID
     */
    void checkCheckinAchievements(Long userId);

    /**
     * 检查完成任务相关的成就
     * @param userId 用户ID
     */
    void checkTaskCompletionAchievements(Long userId);

    // 活跃度类成就检查方法
    
    /**
     * 检查登录相关的成就
     * @param userId 用户ID
     */
    void checkLoginAchievements(Long userId);
    
    /**
     * 检查在线时长相关的成就
     * @param userId 用户ID
     * @param activeMinutes 活跃时长（分钟）
     */
    void checkActiveTimeAchievements(Long userId, int activeMinutes);
    
    /**
     * 检查浏览行为相关的成就
     * @param userId 用户ID
     */
    void checkBrowseAchievements(Long userId);
    
    /**
     * 检查资料完整度相关的成就
     * @param userId 用户ID
     * @param completionPercentage 完整度百分比
     */
    void checkProfileCompletionAchievements(Long userId, int completionPercentage);
    
    /**
     * 检查观看广告相关的成就
     * @param userId 用户ID
     */
    void checkWatchAdAchievements(Long userId);
    
    // 内容创作类成就检查方法
    
    /**
     * 检查发帖相关的成就
     * @param userId 用户ID
     */
    void checkPostAchievements(Long userId);
    
    /**
     * 检查评论相关的成就
     * @param userId 用户ID
     */
    void checkCommentAchievements(Long userId);
    
    /**
     * 检查获得点赞相关的成就
     * @param userId 用户ID
     */
    void checkGetLikeAchievements(Long userId);
    
    /**
     * 检查话题相关的成就
     * @param userId 用户ID
     */
    void checkTopicAchievements(Long userId);
    
    /**
     * 检查相册相关的成就
     * @param userId 用户ID
     */
    void checkAlbumAchievements(Long userId);
    
    // 社交类成就检查方法
    
    /**
     * 检查配对相关的成就
     * @param userId 用户ID
     * @param isSuperMatch 是否超级配对
     */
    void checkMatchAchievements(Long userId, boolean isSuperMatch);
    
    /**
     * 检查发送喜欢相关的成就
     * @param userId 用户ID
     * @param isSuperLike 是否超级喜欢
     */
    void checkSendLikeAchievements(Long userId, boolean isSuperLike);
    
    /**
     * 检查获得喜欢相关的成就
     * @param userId 用户ID
     */
    void checkGetLikeFromUserAchievements(Long userId);
    
    /**
     * 检查关注相关的成就
     * @param userId 用户ID
     * @param isFollowing 是否是关注操作（true为关注，false为被关注）
     */
    void checkFollowAchievements(Long userId, boolean isFollowing);
    
    /**
     * 检查消息相关的成就
     * @param userId 用户ID
     * @param isGroupMessage 是否群消息
     */
    void checkMessageAchievements(Long userId, boolean isGroupMessage);
    
    /**
     * 检查访客相关的成就
     * @param userId 用户ID
     * @param isVisitor 是否是访客（true为访问他人，false为被访问）
     */
    void checkVisitorAchievements(Long userId, boolean isVisitor);
    
    /**
     * 检查群组相关的成就
     * @param userId 用户ID
     */
    void checkGroupAchievements(Long userId);
    
    /**
     * 检查邀请相关的成就
     * @param userId 用户ID
     * @param isValidInvite 是否有效邀请
     */
    void checkInviteAchievements(Long userId, boolean isValidInvite);
    
    // VIP/消费类成就检查方法
    
    /**
     * 检查VIP相关的成就
     * @param userId 用户ID
     */
    void checkVipAchievements(Long userId);
    
    /**
     * 检查爱心币余额相关的成就
     * @param userId 用户ID
     * @param balance 当前余额
     */
    void checkCoinBalanceAchievements(Long userId, int balance);
    
    /**
     * 检查累计获得爱心币相关的成就
     * @param userId 用户ID
     * @param totalEarned 累计获得
     */
    void checkTotalEarnedAchievements(Long userId, int totalEarned);
    
    /**
     * 检查消费相关的成就
     * @param userId 用户ID
     * @param spentAmount 消费金额
     * @param isDaily 是否是单日消费
     */
    void checkSpendingAchievements(Long userId, int spentAmount, boolean isDaily);
    
    /**
     * 检查商城购买相关的成就
     * @param userId 用户ID
     */
    void checkShopPurchaseAchievements(Long userId);
    
    /**
     * 检查购买道具相关的成就
     * @param userId 用户ID
     */
    void checkBuyItemAchievements(Long userId);
    
    /**
     * 检查转账相关的成就
     * @param userId 用户ID
     * @param transferAmount 转账金额
     */
    void checkTransferAchievements(Long userId, int transferAmount);
    
    /**
     * 检查挖矿相关的成就
     * @param userId 用户ID
     * @param earnedAmount 挖矿收益
     */
    void checkMiningAchievements(Long userId, int earnedAmount);
    
    /**
     * 检查质押相关的成就
     * @param userId 用户ID
     */
    void checkStakingAchievements(Long userId);
    
    /**
     * 检查等级相关的成就
     * @param userId 用户ID
     * @param level 当前等级
     */
    void checkLevelAchievements(Long userId, String level);
    
    /**
     * 通用成就进度检查方法
     * @param userId 用户ID
     * @param keyPrefix 成就键前缀
     * @param currentProgress 当前进度
     */
    void checkAchievementProgress(Long userId, String keyPrefix, long currentProgress);

}
